//package SingleLinkedList;
//
///**
// * Created by wangyg6 on 2018/3/15.
// */
//public class Node {
//	Integer value;
//	Node next;
//
//	public Node(int value, Node next) {
//		this.value = value;
//		this.next = next;
//	}
//
//	public Node() {
//	}
//
//	public Node(int value) {
//		this.value = value;
//	}
//
//
//	public int getLength() {
//		if (head == null) {
//			return 0;
//		}
//		int len = 0;
//		while (head != null) {
//			len++;
//			head = head.next;
//		}
//		return len;
//	}
//
//	/** 获取指定角标的节点值 */
//	public int getValueOfIndex(int index) throws Exception {
//		if (index < 0 || index >= getLength()) {
//			throw new Exception("角标越界！");
//		}
//		if (head == null) {
//			throw new Exception("当前链表为空！");
//		}
//		Node dummyHead = head;
//		while (dummyHead.next != null && index > 0) {
//			dummyHead = dummyHead.next;
//			index--;
//		}
//		return dummyHead.value;
//	}
//
//	/** 获取节点值等于 value 的第一个元素角标 */
//	public int getNodeIndex(int value) {
//		int index = -1;
//		Node dummyHead = head;
//		while (dummyHead != null) {
//			index++;
//			if (dummyHead.value == value) {
//				return index;
//			}
//			dummyHead = dummyHead.next;
//		}
//		return -1;
//	}
//
//	public void addAtHead(int value) {
//		Node newHead = new Node(value);
//		newHead.next = head;
//		head = newHead;
//	}
//
//	public void addAtTail(int value) {
//		Node node = new Node(value);
//		Node dummyHead = head; //找到未节点 注意这里是当元素的下一个元素为空的时候这个节点即为未节点
//		while (dummyHead.next != null) {
//			dummyHead = dummyHead.next;
//		}
//		dummyHead.next = node;
//	}
//	// 注意这里 index 从 0 开始
//
//	public Node insertElement(int value, int index) throws Exception { //为了方便这里我们假设知道链表的长度
//		int length = getLength();
//		if (index < 0 || index >= length) {
//			throw new Exception("角标越界！");
//		}
//		if (index == 0) {
//			addAtHead(value);
//		} else if (index == length - 1) {
//			addAtTail(value);
//		} else {
//			Node pre = head;
//			Node cur = head.next; //
//			while (pre != null && index > 1) {
//				pre = pre.next;
//				cur = cur.next;
//				index--;
//			} //循环结束后 pre 保存的是索引的上一个节点 而 cur 保存的是索引值当前的节点
//			Node node = new Node(value);
//			pre.next = node;
//			node.next = cur;
//		}
//		return head;
//	}
//
//	public Node deleteHead() throws Exception {
//		if (head == null) {
//			throw new Exception("当前链表为空！");
//		}
//		return head.next;
//	}
//
//	public void deleteTail() throws Exception {
//		if (head == null) {
//			throw new Exception("当前链表为空！");
//		}
//		Node dummyHead = head;
//		while (dummyHead.next != null && dummyHead.next.next != null) {
//			dummyHead = dummyHead.next;
//		}
//		dummyHead.next = null;
//	}
//
//	public Node deleteElement(int index) throws Exception {
//		int size = getLength();
//		if (index < 0 || index >= size) {
//			throw new Exception("角标越界！");
//		}
//		if (index == 0) {
//			return deleteHead();
//		} else if (index == size - 1) {
//			deleteTail();
//		} else {
//			Node pre = head;
//			while (pre.next != null && index > 1) {
//				pre = pre.next;
//				index--;
//			} //循环结束后 pre 保存的是索引的上一个节点 将其指向索引的下一个元素
//			if (pre.next != null) {
//				pre.next = pre.next.next;
//			}
//		}
//		return head;
//	}
//
//	public static void main(String[] args) throws Exception {
//		SingleList list = new SingleList();
//		list.addAtTail(1);
//		list.addAtTail(2);
//		list.addAtTail(3);
//		list.addAtTail(4);
//		list.addAtTail(5);
//		list.addAtHead(0);
//		System.out.println(list);
//	}
//}
